package com.android.provinciaRestClient.service.impl;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import android.widget.EditText;

import com.android.provinciaRestClient.R;
import com.android.provinciaRestClient.domain.Provincia;
import com.android.provinciaRestClient.exception.ConexionException;
import com.android.provinciaRestClient.service.BusquedaService;
import com.android.provinciaRestClient.service.ProvinciaService;

public class BusquedaServiceImpl implements BusquedaService {

	private ProvinciaService provinciaService;
	
	/**
	 * Constructor de la clase.
	 * @param provinciaService service de la entidad Provincia.
	 */
	public BusquedaServiceImpl(ProvinciaService provinciaService){
		this.provinciaService = provinciaService;
	}

	@Override
	public void buscarProvincia(EditText tBusqueda, EditText tResultado) {

		try {
			List<Provincia> coincidencias = buscarCoincidencias(tBusqueda);
			mostrarResultadosBusqueda(tResultado, coincidencias);
		} catch (ConexionException e) {
			tResultado.setText(e.getMessage());
		}

	}

	/**
	 * @param tResultado
	 * @param coincidencias
	 */
	private void mostrarResultadosBusqueda(EditText tResultado,
			List<Provincia> coincidencias) {
		if (coincidencias.size() == 0) {
			tResultado.setText(R.string.noResults);
		} else {
			String resultado = "";
			for (Iterator<Provincia> iterator = coincidencias.iterator(); iterator
					.hasNext();) {
				Provincia provincia = (Provincia) iterator.next();
				resultado = resultado.concat(" " + provincia.getNombre());
			}
			tResultado.setText(resultado);
		}
	}

	/**
	 * @param tBusqueda
	 * @return
	 * @throws ConexionException
	 */
	private List<Provincia> buscarCoincidencias(EditText tBusqueda)
			throws ConexionException {
		List<Provincia> provincias;
		provincias = provinciaService.buscarTodas();
		List<Provincia> coincidencias = new ArrayList<Provincia>();

		for (Iterator<Provincia> iterator = provincias.iterator(); iterator
				.hasNext();) {
			Provincia provincia = (Provincia) iterator.next();

			if (provincia.getNombre().toLowerCase()
					.contains(tBusqueda.getText().toString())) {
				coincidencias.add(provincia);
			}

		}
		return coincidencias;
	}
}
